package cn.desk.dialog.action;

import java.util.Collection;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import cn.desk.commons.action.CurdAction;
import cn.desk.commons.entity.PageMode;
import cn.desk.dialog.entity.Button;
import cn.desk.dialog.entity.Dialog;

public class DialogAction<T extends Dialog> extends CurdAction<T> {
	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;

	private static final Logger logger = LoggerFactory
			.getLogger(DialogAction.class);

	private String dialogs;
	private List<Button> buttons;

	// private IButtonService<Button> buttonService;
	@Override
	public String listPage() {
		logger.debug("listPage start");
		pageMode = service.listPage(pageMode, t, "id");
		logger.debug("listPage end");
		return "listPage";
	}

	public String loadDep() {
		logger.debug("loadDep start");
		list = service.listInByProperty(Dialog.class, "id", dialogs.split(","));
		// for(Dialog d:list){
		// List<Button> buttons = buttonService.listByProperty(Button.class,
		// "dialog", d);
		// d.setButtons(buttons);
		// }
		logger.debug("loadDep end");
		return "loadDep";
	}

	// @Override
	// public String add() {
	// logger.debug("add start");
	// String result = super.add();
	// addButtons();
	// logger.debug("add end");
	// return result;
	// }

	@Override
	public String update() {
		logger.debug("update start");
		try {
			if(buttons!=null){
				Set<Button> buts = new HashSet<Button>();
				buts.addAll(buttons);
				for (Button b : buts) {
					b.setDialog(t);
				}
				t.setButtons(buts);
			}
			return super.update();
		} finally {
			logger.debug("update end");
		}

		// deleteButtons();
		// addButtons();

		// return result;
	}

	// @Override
	// public String delete() {
	// logger.debug("delete start");
	// String result= super.delete();
	// deleteButtons();
	// logger.debug("delete end");
	// return result;
	// }

	// private void addButtons() {
	// logger.debug("addButtons start");
	// if (buttons == null) {
	// logger.info("buttons size is 0");
	// }else{
	// for (Button b : buttons) {
	// if (b != null) {
	// try {
	// b.setDialog(t);
	// buttonService.add(b);
	// } catch (DeskException e) {
	// addActionError(e.getMessageInfo());
	// }
	// }
	// }
	// }
	// logger.debug("addButtons end");
	// }
	//
	// private void deleteButtons() {
	// logger.debug("deleteButtons start");
	// Button button = new Button();
	// button.setDialog(t);
	// List<Button> buttons = buttonService.listByProperty(Button.class,
	// "dialog", t);
	// if (buttons == null) {
	// logger.info("buttons size is 0");
	// }else{
	// for (Button b : buttons) {
	// try {
	// buttonService.delete(b);
	// } catch (DeskException e) {
	// addActionError(e.getMessageInfo());
	// }
	// }
	// }
	// logger.debug("deleteButtons end");
	// }
	//
	// @Override
	// public String load() {
	// logger.debug("load start");
	// String result = super.load();
	// // Button button = new Button();
	// // button.setDialog(t);
	// // List<Button> buttons = buttonService.listByProperty(Button.class,
	// "dialog", t);
	// // t.setButtons(buttons);
	// logger.debug("load end");
	// return result;
	// }

	@Override
	public String getModeName() {
		return "dialog";
	}

	public String getDialogs() {
		return dialogs;
	}

	public void setDialogs(String dialogs) {
		this.dialogs = dialogs;
	}

	@Override
	public List<T> getList() {
		return super.getList();
	}

	@Override
	public Map<String, List<String>> getFieldErrors() {
		return super.getFieldErrors();
	}

	@Override
	public Collection<String> getActionErrors() {
		return super.getActionErrors();
	}

	@Override
	public T getT() {
		return super.getT();
	}

	@Override
	public PageMode<T> getPageMode() {
		return super.getPageMode();
	}

	public List<Button> getButtons() {
		return buttons;
	}

	public void setButtons(List<Button> buttons) {
		this.buttons = buttons;
	}

	// public void setButtonService(IButtonService<Button> buttonService) {
	// this.buttonService = buttonService;
	// }

}
